27. 考虑错误
🚧 三种错误
根据我的经验,编程中会出现三大类型的错误: 语法错误 、 用法错误 和 逻辑错误 。
语法错误就像拼写错误
第一个是
语法错误
。也就是写的代码在语言语法上不合理。在 Python 中,如果只写了
)
,但是前面没有
(
,则存在语法错误。如果
for
循环里忘了
:
,则也存在语法错误。
import turtle
alison = turtle.Turtle()
for angle in [15, 30, 45] # missing colon 缺少冒号
alison.right 90) # missing parenthesis 缺少括号
语法错误就像拼写错误。当你学习新的语言时,很可能会犯很多语法错误。但是当你熟练该语言后,错误就会少了。
用法错误就像不合理的答案
第二种错误可以称之为
用法错误
。当你要求计算机执行不合理的操作时,就存在用法错误。例如,
alison.forward("orange")
是用法错误。完全符合语法,但是
forward
方法要求提供数字(表示像素距离),而不是字符串。turtle 无法向前移动
"orange"
像素。
这种错误就相当于说的话很奇怪,或者答案不合理:
问: 今天午餐你要吃什么?
答: 从纽约到伦敦的距离。
问: 你最喜欢的颜色是什么颜色?
答: 企鹅。
你不能吃距离;企鹅不是颜色。对于这些问题来说,这些答案不合理,就像
"orange"
不能作为
forward
方法的输入一样。
Python 的
NameError
和
TypeError
消息通常都是这种类型的错误。你之前见到的
ZeroDivisionError
也算是这种错误。
逻辑错误就像提出错误的要求
最后,第三种错误是 逻辑错误 。程序能正常运行 — 没有崩溃 — 但是行为和你想要的不一样,因为你所写的和你想要的不一样。这就和人们常常说道“计算机并非按照你所想的去操作,而是按照你告诉它的指令去操作。”一个意思。
例如,如果我想画一个八边形 🛑,并且我的代码是 —
import turtle
michael = turtle.Turtle()
for side in [1, 2, 3, 4, 5, 7, 8]:
michael.forward(100)
michael.right(45)
那么我的代码存在逻辑错误。请仔细检查,看看你能否找到该错误。
SOLUTION:
**for** 循环开始的行缩进可能很麻烦
代码可能会出错的地方是循环缩进。如果你发现某些代码行运行的次数超出(或少于)预期了,仔细检查下循环缩进情况。
for a in [1, 2, 3]:
# code here will run 3 times. 此处代码将运行 3 次
for b in [4, 5, 6]:
# code in here will run 9 times 此处代码将运行 9 次
# but code here will run only 3 times! 但此处代码将只运行 3 次